{{tag>feisty lucid maverick virtualisation BROUILLON}}


====== Kernel Virtual Machine ======

**KVM**, //Kernel Virtual Machine//, est intégré depuis le noyau 2.6.20 et permet une virtualisation matérielle et donc une accélération de la virtualisation de système d’exploitation.

C'est un système optimisé pour la virtualisation de serveur. Pour virtualiser des systèmes de type desktop, on peut lui préférer [[virtualbox]]. **KVM** semble en effet plus performant en consommation de processeur mais plus lent pour l'émulation du périphérique graphique. L'utilisation d'un bureau virtualisé dans **VirtualBox** pourra donc laisser une meilleure impression à l'utilisateur.

Néanmoins, **KVM** est complètement libre, performant et très facile à installer et à utiliser. Enfin, les administrateurs réseaux pourront être intéressés par [[virt-manager]]

<note important>Si vous installez **KVM**, vous ne pourrez plus utiliser la virtualisation du processeur (multi-processeurs, 64 bits, pagination imbriquée) pour **VirtualBox**</note>

===== Mise en place =====

Tout d’abord, assurez-vous que votre processeur supporte la virtualisation matérielle et, si c’est bien le cas, assurez-vous également que ce support est bien activé par le BIOS. Pour cela tapez cette commande :
<code>egrep '^flags.*(vmx|svm)' /proc/cpuinfo</code>
Si un résultat s'affiche, c'est que le processeur supporte la virtualisation.

  * //**Pour Ubuntu 9.10 et suivants**// : Il suffit d'[[apt|installer]] le paquet **[[apt://qemu-kvm|qemu-kvm]]** ;
  * //**Pour Ubuntu 9.04 et antérieurs**// : Il suffit d'[[apt|installer]] les paquets **[[apt://kvm|kvm]]** et **[[apt://qemu|qemu]]**.

Puis, charger le module en fonction de votre processeur :
  * Pour un processeur AMD : <code>sudo modprobe kvm-amd</code>
  * Pour un processeur Intel : <code>sudo modprobe kvm-intel</code>

ajouter le module choisi dans /etc/modules pour que cela soit pris en compte au redémarrage :
<code>kvm-intel</code>
ou
<code>kvm-amd</code>

===== Droits utilisateur =====

<note important>Le périphérique '/dev/kvm' n'est accessible en écriture qu'aux utilisateurs du groupe kvm.</note>

Ajouter votre utilisateur à ce groupe, soit à l’aide de votre outil de gestion des groupes, soit avec cette commande :
<code>sudo adduser $USER kvm</code>
Redémarrez enfin l'ordinateur (ou simplement la session si aucune console tty n'est ouverte) afin que l'utilisateur soit affecté au groupe.

===== Utilisation =====

Vous voilà prêt à installer un système d’exploitation virtuel.

Commencez par créer le fichier image qui va accueillir ce système :
<code>qemu-img create -f qcow2 emplacement/du/fichier_image.img 6G</code>
Où :
  * ''emplacement/du/fichier_image.img'' est l’emplacement du fichier qui sera créé, 
  * ''6G'' est la taille virtuelle de ce système de fichier virtuel.

Puis installez votre système dessus en utilisant un CD-ROM d’installation :
<code>kvm -m 256 -cdrom /dev/cdrom -boot d emplacement/du/fichier_image.img</code>
Où ''256'' est la quantité de mémoire à utiliser.

Vous pouvez également utiliser une image ISO sans la graver :
<code>kvm -m 256 -cdrom emplacement/de/l_image.iso -boot d emplacement/du/fichier_image.img</code>

Pour quitter la fenêtre de virtualisation, il vous faut utiliser les combinaisons de touches "''CTRL-ALT''"
Une fois l'installation terminée, démarrez votre système virtuel :
<code>kvm -m 256 emplacement/du/fichier_image.img</code>

pour l'activation du son et de l'USB :

<code>kvm -m 386 -std-vga -cdrom /dev/cdrom emplacement/du/fichier_image.img -soundhw all -usb</code>

Voir aussi les autres paramètres de [[qemu]] qui peuvent être passés à kvm.



==== Problèmes d’utilisation des CDs Ubuntu avec les processeurs Intel ====

Un [[https://bugs.launchpad.net/ubuntu/+source/kvm/+bug/94545|bug]] sur feisty empêche le démarrage des Live-CDs Ubuntu avec les processeurs Intel. La solution est de faire l’installation en désactivant le support de kvm. L’utilisation d'une machine virtuelle installée se fait correctement avec kvm.

Un [[https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/338219|bug]] sur Jaunty Jackalope empêche l'utilisation de l'option //-vga std// à moins de configurer manuellement le serveur X après l'installation.

===== Suppression de Kvm =====

Pour supprimer cette application, [[:tutoriel:comment_supprimer_un_paquet|supprimez son paquet]]. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.

A partir de Ubuntu 9.10 et suivant, il faut également [[:tutoriel:comment_supprimer_un_paquet|supprimer le paquet]] **qemu-kvm** pour que la désinstallation soit complète.  

<note tip>S'il reste encore les modules installés à la main ( dans la partie mise en place de cette page), ouvrez un terminal puis tapez : <code>lsmod | grep -e '^kvm'</code>

Pour retirer les modules, tapez :
<code>sudo rmmod (nom_du_module)</code>

<note warning>Les modules seront à nouveau chargés au prochain redémarrage.</note>
</note>

===== Utilisation avancée =====

==== Conversion d'image disque ====

  * Compression d'une image disque au format qcow2 (attention la compression est "perdue" à la réécriture pour toutes les données qui seront modifiées) :
<code>$ kvm-img convert -c -f qcow2 image.qcow2 -O qcow2 image-compressed.qcow2</code>

  * Conversion d'une image disque
<code>$ kvm-img convert -f vmdk image.vmdk -O qcow2 image.qcow2</code>


==== Conversion d'image disque IMG vers un LV (LVM) ====
Vous pouvez monter directement un LV sur votre machine virtuelle. Ceci explique comment convertir un fichier .img en un Logical Volume sur LVM (visible depuis votre serveur KVM)
Vous devez avoir au préalable déjà préparé un VG qui contiendra les data pour vos VM (ici appelé "vg_data"). (cf:[[:lvm|Doc Ubuntu]])

  * Vérifier que le VG dispose de la place nécessaire 
  * Création du LV "lv_VmName" sur le VG "vg_data" : 
<code>lvcreate -L80G -n lv_v-VmName vg_data</code>
* Arrêt de votre VM
* Copie du contenu de l'image IMG vers le LV :
<code>dd if=/path/to/image/v-VmName.coe.int.img of=/dev/vg_data/lv_v-VmName</code>
* Configurer votre VM pour utiliser ce LV
==== Amélioration des performances ====

L'utilisation des bus virtio permet de prendre en compte la virtualisation par l'invité grâce à des pilotes spécifiques qui lui permettent de travailler en collaboration avec l'hyperviseur kvm de l'hôte.
  * Pour les disques :
    * à partir de Linux 2.6.25 (sur l'invité) on peut utiliser le bus virtio de manière transparente. Les disques apparaissent comme des périphériques /dev/vdX sur l'invité
    * sous Windows, télécharger l'[[http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/|iso des pilotes]] (comme indiqué [[http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers|ici]]) puis installer les pilotes.\\ Windows ne permet pas d'installer les pilotes si un disque dur n'utilise pas le bus virtio, d'où l'[[http://www.linux-kvm.com/content/redhat-54-windows-virtio-drivers-part-2-block-drivers|astuce suivante]] pour installer le pilote :
      - démarrer l'invité normalement (disque dur sur bus ide par exemple)
      - ajouter un second disque dur (cette fois sur le bus virtio ; le disque dur n'a pas besoin de contenir de données)
      - installer les pilotes sur l'invité
      - éteindre l'invité
      - supprimer le second disque dur (inutile) puis le premier disque (sur bus ide par exemple)
      - ajouter le premier disque dur sur bus virtio
      - redémarrer l'invité
  * Pour le réseau : les idées précédentes sont applicables pour le réseau 

===== outil graphique permettant d'administrer les machines virtuelles gérées par kvm =====
  *[[virt-manager]]
  *[[aqemu]] interface graphique en Qt4 de gestion de [[qemu]] et kvm.
===== Ressources externes =====

  * [[http://fr.wikipedia.org/wiki/Kernel-based_Virtual_Machine|Article wikipedia]]
  * [[qemu]]
  * [[https://help.ubuntu.com/community/KVM|Article sur le wiki anglophone]]
  * Amélioration des performances des disques virtuels [[http://blog.bodhizazen.net/linux/improve-kvm-performance/|ici (en)]].
  * [[http://www.linux-kvm.com/content/be-more-productive-base-images-part-3|Manipulation des images disque dur avec image de "base"]] (utilisée par des images "cow" : copy on write). Voir aussi les "part 1" et "2". (Remarque : pour chaîner plus d'une fois l'image, voir [[https://bugs.launchpad.net/ubuntu-release-notes/+bug/656173|l'aspect sécurité présenté sur Launchpad]]).

  * [[http://www.linux-france.org/prj/inetdoc/articles/vm/|A voir surtout pour la partie réseau,bridge,vlan]]

  * [[http://xenman.sourceforge.net/index.html]] ConVirt un Gui pour la virtualisation (simple et efficace)

  * [[http://www.ubuntu-party.org/party-files/FR/20090516/audios/E4_Virtualisation-avec-KVM.ogg|Virtualisation avec KVM]] : conférence audio réalisée par Nicolas Barcet durant la Ubuntu party du 17 mai 2009.
  * [[http://thegeekcorner.pagesperso-orange.fr/fr/tutoriel/kvm_linux.html|tuto généraliste kvm en français]]